#pragma once

#include <GraphicsBaseOperation.h>
#include <GraphicsPinkItem.h>


class GraphicsStretchOperation : public GraphicsBaseOperation
{
public:
	GraphicsStretchOperation(GraphicsBaseItemData& itemData, QObject* parent = nullptr);

	// 拉伸图元
	void stretchGraphics(GraphicsPinkItemType type, const QPointF& delta);

	// 以边角点进行拉伸图元(等比拉伸)
	void stretchGraphicsOnCornerKeepRatio(GraphicsPinkItemType type, const QPointF& delta);

	// 以边角点进行拉伸图元
	void stretchGraphicsOnCorner(GraphicsPinkItemType type, const QPointF& delta);

	// 以中心点进行拉伸图元
	void stretchGraphicsOnCenter(GraphicsPinkItemType type, const QPointF& delta);
private:
	// 右边拉伸，delta是相对于按压点的偏移距离
	void stretchRight(const QPointF& delta);

	// 左边拉伸
	void stretchLeft(const QPointF& delta);

	// 顶部拉伸,isUseCurrentTopLeftPos用于左上角拉伸
	void stretchTop(const QPointF& delta, bool isUseCurrentTopLeftPos = false);

	// 底部拉伸
	void stretchBottom(const QPointF& delta);

	// 固定模式下，左上角等比例缩放
	void stretchKeepRatioTopLeft(const QPointF& delta);

	// 固定模式下，右上角等比例缩放
	void stretchKeepRatioTopRight(const QPointF& delta);

	// 固定模式下，右下角等比例缩放
	void stretchKeepRatioBottomRight(const QPointF& delta);

	// 固定模式下，左下角等比例缩放
	void stretchKeepRatioBottomLeft(const QPointF& delta);

	// 检查是否超过父图元的尺寸
	bool checkParentBounding(const QRectF& boundingRect, QRectF& scaleRect);
};

